
package Controladora;

import BoundaryGUI.TelaCadMedicoGUI;
import BoundaryGUI.TelaListarMedicosGUI;
import Negocio.Medico;
import Negocio.Endereco;
import Persistencia.Medicos;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Victor
 */
public class ControlaMedico {
    
    
    private Medicos listaMedicos;

    public ControlaMedico() {
        
        listaMedicos = new Medicos();
        
        
    }
    
    public void cadastrarMedicos(TelaCadMedicoGUI tela)
    {
        
        if(!existeMedicoCadastrado(tela.getJtCRM().getText()))    
        {
            if (tela.getJtCRM().getText().equals(""))
                    
            {
                JOptionPane.showMessageDialog(null, "Campo CRM Vazio!");
            }
            else if(tela.getJtNome().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo Nome Vazio!");
            }
            else if(tela.getJtTelefone().getText().equals("(  )     -    "))
            {
                JOptionPane.showMessageDialog(null, "Campo Telefone Vazio!");
            }
            else if(tela.getJtEmail().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo E-mail Vazio!");
            }
            else if(tela.getJtEspecialidade().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo Especialidade Vazio");
            }
            else if(tela.getJtRua().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo Rua Vazio!");
            }
            else if(tela.getJtNumero().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo Numero Vazio!");
            }
            else if(tela.getJtBairro().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo Bairro Vazio!");
            }
            else if(tela.getJtCidade().getText().equals(""))
            {
                JOptionPane.showMessageDialog(null, "Campo Cidade Vazio!");
            }
            else if(tela.getJcEstado().getSelectedIndex() == 0)
            {
                JOptionPane.showMessageDialog(null, "Campo Estado Vazio!");
            }
            else
            {
                Endereco endereco = new Endereco(tela.getJtRua().getText(), tela.getJtBairro().getText(), tela.getJtNome().getText(), tela.getJtCidade().getText(), tela.getJcEstado().getSelectedItem().toString());

                Medico c = new Medico(tela.getJtNome().getText(), tela.getJtCRM().getText(), endereco, tela.getJtEspecialidade().getText(), tela.getJtEmail().getText(), tela.getJtTelefone().getText());

                int op = JOptionPane.showConfirmDialog(null, "Confirma Dados do Medico?");

                if(op == 0)
                {
                    listaMedicos.adiciona(c);
                    JOptionPane.showMessageDialog(null, "Medico Salvo com Sucesso!");
                    bloquearTelaPraEdição(tela);
                } 
            }
            
        }
        else
        {
            Medico c = buscarMedicoPorCRM(tela.getJtCRM().getText());
            listaMedicos.excluirMedico(c);
            cadastrarMedicos(tela);
            
        }
        
        
    }

    public void carregarDados()
    {
        listaMedicos.leitura();        
    }
    
    public void carregarTabela(TelaListarMedicosGUI tela)
    {
        DefaultTableModel tm;
        Object colunas[] = {"Nome", "CRM", "Especialidade", "Telefone", "E-mail"};
        tm = new DefaultTableModel(colunas, 0);
        tm.setNumRows(0);
        
        for (int i = 0; i < listaMedicos.getMedicos().size(); i++) 
        {
            Medico c = (Medico) listaMedicos.getMedicos().get(i);
            String c1 = c.toString();
            String linha[] = c1.split("%");
            tm.addRow(new Object[]{linha[0], linha[1], linha[2], linha[3], linha[4]});
        }
        tela.getJtMedicos().setModel(tm);
        
    }
    
    
    private void carregarTabela(TelaListarMedicosGUI tela, String pNome) 
    {
        DefaultTableModel tm;
        Object colunas[] = {"Nome", "CRM", "Especialidade", "Telefone", "E-mail"};
        tm = new DefaultTableModel(colunas, 0);
        tm.setNumRows(0);
        
     //   String pCRM = null;

        for (int i = 0; i < listaMedicos.getMedicos().size(); i++) 
        {
            Medico c = (Medico) listaMedicos.getMedicos().get(i);
            
            //Procurar Só Pelo CRM
       //     if(pNome.equals("NULL"))
         //   {
                
           //     if(c.getCRM() == pCRM)
             //   {
           //         String c1 = c.toString();
             //       String linha[] = c1.split("%");
               //     tm.addRow(new Object[]{linha[0], linha[1], linha[2], linha[3], linha[4]});
               // }
            //}
            //procurar só pelo nome
            //else if(CRM == null)
            //{
                if(c.getNome().toLowerCase().contains(pNome.toLowerCase()))
                {
                    String c1 = c.toString();
                    String linha[] = c1.split("%");
                    tm.addRow(new Object[]{linha[0], linha[1], linha[2], linha[3], linha[4]});
                }
            //}
            //procurar por nome e sexo
         /*
            else
            {
                if(c.getNome().toLowerCase().contains(pNome.toLowerCase()) && c.getCRM() == pCRM)
                {
                    String c1 = c.toString();
                    String linha[] = c1.split("%");
                    tm.addRow(new Object[]{linha[0], linha[1], linha[2], linha[3], linha[4]});
                }
            
            }
            * 
            */
        //}
        tela.getJtMedicos().setModel(tm);
    }
}    

    public void carregarTabelaPesquisa(TelaListarMedicosGUI tela)
    {
        if(tela.getJtPesquisar().getText().equalsIgnoreCase(""))
            {
                carregarTabela(tela);
            }
           
            
            else if(tela.getJtPesquisar().getText().length() > 0)
            {
                carregarTabela(tela, tela.getJtPesquisar().getText());
            } 
            
    
    }
    
  
    
    public void ExcluirMedico(TelaListarMedicosGUI tela) {
        
        try 
        {

            int linha = tela.getJtMedicos().getSelectedRow();
            String pCRM;

            if (linha == -1) 
            {
                throw new Exception("Selecione Uma Linha Primeiro!");
            }

            int x = JOptionPane.showConfirmDialog(null, "Deseja Realmente Excluir?");
            
            if (x == JOptionPane.YES_OPTION) 
            {
                pCRM = (String) tela.getJtMedicos().getValueAt(linha, 1);
                Medico c = buscarMedicoPorCRM(pCRM);
             
                listaMedicos.excluirMedico(c);
                
                JOptionPane.showMessageDialog(null, "Medico Excluido com Sucesso!");
                carregarTabela(tela);
            }
            
        } catch (Exception e) 
        {
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
        
    }
    
    public boolean existeMedicoCadastrado(String pCRM)
    {
        if(listaMedicos.buscarMedicoPorCRM(pCRM) != null)
        {
            return true;
        }
        else
        {
            return false;
        }
        
    }
    
    
    public Medico buscarMedicoPorNome(String pNomeMedico)
    {
       
        return listaMedicos.buscarMedicoPorNome(pNomeMedico);
        
    }
    
    public Medico buscarMedicoPorCRM(String pCRM)
    {
       
        return listaMedicos.buscarMedicoPorCRM(pCRM);
        
    }
    
    
    public void LimparCampos(TelaCadMedicoGUI tela)
    {
        tela.getJtCRM().setText("");
        tela.getJtNome().setText("");
        tela.getJtTelefone().setText("");
        tela.getJtEmail().setText("");
        tela.getJtEspecialidade().setText("");
        tela.getJtRua().setText("");
        tela.getJtNumero().setText("");
        tela.getJtBairro().setText("");
        tela.getJtCidade().setText("");
        tela.getJcEstado().setSelectedIndex(0);
    }
    
    public void liberarTelaPraEdição(TelaCadMedicoGUI tela)
    {
        tela.getJtCRM().setEditable(true);
        tela.getJtNome().setEditable(true);
        tela.getJtTelefone().setEditable(true);
        tela.getJtEmail().setEditable(true);
        tela.getJtEspecialidade().setEditable(true);
        tela.getJtRua().setEditable(true);
        tela.getJtNumero().setEditable(true);
        tela.getJtBairro().setEditable(true);
        tela.getJtCidade().setEditable(true);
        tela.getJcEstado().setEditable(true);
        
        tela.getBtnSalvar().setEnabled(true);
    }
    
    public void bloquearTelaPraEdição(TelaCadMedicoGUI tela)
    {
        
        tela.getJtCRM().setEditable(false);
        tela.getJtNome().setEditable(false);
        tela.getJtTelefone().setEditable(false);
        tela.getJtEmail().setEditable(false);
        tela.getJtEspecialidade().setEditable(false);
        tela.getJtRua().setEditable(false);
        tela.getJtNumero().setEditable(false);
        tela.getJtBairro().setEditable(false);
        tela.getJtCidade().setEditable(false);
        tela.getJcEstado().setEditable(false);
        
        tela.getBtnSalvar().setEnabled(false);
    }

    public void visualizarEditarMedico(TelaListarMedicosGUI tela) {
        
        try
        {
            
            int linha = tela.getJtMedicos().getSelectedRow();
            String pCRM;

            if (linha == -1) 
            {
                throw new Exception("Selecione Uma Linha Primeiro!");
            }

            pCRM = (String) tela.getJtMedicos().getValueAt(linha, 1);
            Medico c = buscarMedicoPorCRM(pCRM);
             
            TelaCadMedicoGUI tEdit = new TelaCadMedicoGUI(this);
            
            /*
            if(c.getSexo() == 'M')
            {
                tEdit.getJcSexo().setSelectedIndex(1);
            }
            else
            {
                tEdit.getJcSexo().setSelectedIndex(2);
            }
            */
            int uf = 0;
            if(c.getEndereco().getUF().equals("ES"))
            {
                uf = 1;
            }
            else if(c.getEndereco().getUF().equals("MG"))
            {
                uf = 2;
            }
            else if(c.getEndereco().getUF().equals("RJ"))
            {
                uf = 3;
            }
            else if(c.getEndereco().getUF().equals("SP"))
            {
                uf = 4;
            }

            tEdit.getJtRua().setText(c.getEndereco().getLogradouro());
            tEdit.getJtNumero().setText(c.getEndereco().getNumero());
            tEdit.getJtBairro().setText(c.getEndereco().getBairro());
            tEdit.getJtCidade().setText(c.getEndereco().getCidade());
            tEdit.getJcEstado().setSelectedIndex(uf);
            
            tEdit.getJtNome().setText(c.getNome());
            tEdit.getJtCRM().setText(c.getCRM());
            tEdit.getJtEspecialidade().setText(c.getEspecialidade());
            tEdit.getJtTelefone().setText(c.getTelefone());
            tEdit.getJtEmail().setText(c.getEmail());
          
            
            bloquearTelaPraEdição(tEdit);

        }catch(Exception e)
        {
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
        
    }

}